繼之前分享如何實作「窮人版 ELK」之後,再來分享一下這個服務裡面的 DSL 是如何實作的。會想到要為這個服務做 DSL,主要是小編雖然已經把 Impala 產生的資料利用一些工具轉成 PNG 圖檔,但動作太繁雜,所以想把這些過程用 DSL 來表示,工程師只要會下 SQL 就能把資料轉成 PNG 圖檔了。
其實對於 DSL,有在 follow 粉絲頁的朋友應該有注意到,小編很久以前就有一個屬意的方案了,那就是 MSON。它結合了 Markdown 以及 JSON,所以不只人類易讀,機器也易讀。只不過 MSON Parser 一直都是殘缺不全,所以沒辦法讓小編完整的實作 DSL,這個方案就被捨棄了。
另一個也很適合拿來做 DSL 的就是 YAML 了,個人覺得跟 MSON 比起來易讀性稍低一點,但已經是目前還不錯的實作方式,所以就以這個來做為「窮人版 ELK」的 DSL 實作方案。
DSL 已經把所有轉換的細節都隱藏起來了,工程師只要先自己在 Impala 上撰寫正確的 SQL 指令,其他動作只要把必要欄位填完就可以了。下面是必要欄位的說明:
* SQL:要在 Impala 裡面執行的 SQL 指令,其中有用 ":VAR" 包起來的變數名稱,表示是從 INPUT 欄位取得
* CHART:highcharts 的圖表格式,DSL 目前支援 column (長條圖)、pie (圓餅圖)
* INPUT:這是一個陣列,表示這個變數名稱是從外部操作時取得,另外後面的 "date" 為資料型態,目前支援的類型為 HTML 的 input[type]
* OUTPUT:產生 PNG 圖檔時的欄位資訊,如 X 軸是從 Impala 的哪個欄位取得,顯示在圖表上的名稱要叫什麼
至於轉換細節又是另一件麻煩事,將 DSL 轉成最後的圖檔又經過了不少步驟:
1. js-yaml:雖然說 YAML 很適合拿來做 DSL,但 JSON 還是目前大家最常用的格式。所以當然要先把 YAML 轉成 JSON 這樣才好操作 XD
2. jq:轉換過程中 jq 幫了小編很大的忙,官網寫著這是一套輕量且靈活的命令列 JSON 處理工具。無論要對 JSON 取 key、取 value、取 length、做 group by、做 sort by、if-else、while-loop 都可以,就是很強大。所以小編就拿這個將 YAML 轉換完的 JSON,用一堆奇怪的語法把資料轉換成功。
其實在轉換過程最麻煩的不是操作 JSON,最麻煩的在小編不太會寫 bash script 啊!!!尤其是一堆變數轉換的過程,一下子用 ${},一下子用 $(),還有 ${[$k]} 的這種寫法,看了頭好痛 Orz
最後把 jq 轉完的資料丟給前一篇提到的那些工具,就可以完美把 PNG 圖檔產生出來了,第二篇的「窮人版 ELK」文章到此也就結束了。其實這個專案還有另一個跟圖表無關的功能,那就是即時觀看 API 發送歷程,如果有第三篇的話再來分享一下好了。
* 如何實作「窮人版 ELK」:https://www.facebook.com/kewang.information/posts/2085843121692051
* 如何使用 MSON 的幾個方向:https://www.facebook.com/kewang.information/posts/1940647046211660
* jq:https://stedolan.github.io/jq
#mson #dsl #yaml #json #jq
html input value 在 Kewang 的資訊進化論 Facebook 的最佳解答
小編這兩天看到了這個影片,本來還以為是有什麼偉大的發現,想說快點進去看看教學,沒想到只是把 input type 從 password 改成 text 而已。但讓小編比較有興趣的是這個影片的錄製者看起來是一位小朋友。
其實小編還蠻佩服這位小朋友的,雖然影片的內容其實沒有什麼太大意義,而且也用錯方式了。但這麼小就知道分享一些技術文章出來,算是要大大鼓勵了!!!不過還是希望這位小朋友在錄影片之前先搞清楚 HTML 的 attribute 以及 value 的不同。另外也讓小編想起了一些有趣的東西,就是"語系"。
之前小編在學校教兩學期課程時,看到不同學期的不同助教在協助安裝 eclipse 的時候,因為小編不知道是從哪裡來的 eclipse 安裝檔,所以裝好之後選單都是正體中文,中文選單對開發者總是會有點怪異,所以說要改成英文語系。
此時就看到助教教下面的學生把執行檔後面多加一個 zh_US,說是改成這樣子之後 eclipse 就會變成英文語系了。這時小編就是三條線,不知道該怎麼說才好。這很明顯的就是助教不知道從哪邊找來 zh_US 這種改法,然後又不去理解為什麼要這樣子改。
使用 zh_US 會變成英文語系是因為一般沒有開發者會去做 zh_US 這種 locale,所以 eclipse 或是大部分的軟體都會 fallback 回 en_US,才會顯示英文語系。所以如果助教在上課前先了解這些東西的話,就不會在這個地方鬧笑話了。
html input value 在 How To Get an Input Value With JavaScript - YouTube 的美食出口停車場
In this tutorial, you'll learn how to get input values with JavaScript and also how to set them dynamically with your JavaScript code. ... <看更多>